package com.crm.dao.mapper.customMapper.cluePoolManagerCustomMapper;

import com.crm.model.entity.cluePoolManager.Clue;
import com.crm.model.qo.cluePoolManager.ClueExtentQO;
import com.crm.model.qo.cluePoolManager.ClueQO;
import com.crm.model.qo.cluePoolManager.ClueSeniorQO;
import com.crm.model.vo.cluePoolManager.ClueVO;
import com.crm.model.vo.cluePoolManager.UserCompanyVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @Author yincuimei
 * @Date 2021/1/6 10:10
 */
public interface ClueCustomMapper {

    /**
     * 私有池、分公司公有池、全国公有池的线索清单
     * @param clueQO        ---普通搜索条件
     * @param clueSeniorQO  ---高级搜索条件(包括行业、成立年限、注册资本、企业类型、参保人数、有无联系电话、有无联系人、有无联系邮箱)
     * @return
     */
    List<ClueVO> selectPublicPoolClueList(@Param("clueQO")ClueQO clueQO,@Param("clueSeniorQO")ClueSeniorQO clueSeniorQO,@Param("orderStr")String orderStr);

    /**
     * 个人池线索的线索清单(包括个人默认池、个人创建的线索池)
     * @param clueQO        ---普通搜索条件
     * @param clueSeniorQO  ---高级搜索条件(包括行业、成立年限、注册资本、企业类型、参保人数、有无联系电话、有无联系人、有无联系邮箱)
     * @return
     */
    List<ClueVO> selectPrivatePoolClueList(@Param("clueQO")ClueQO clueQO,@Param("clueSeniorQO")ClueSeniorQO clueSeniorQO,@Param("orderStr") String orderStr);

    /**
     * 线索--收回
     * @param clueQO
     * @return
     */
    int updateClueState(@Param("clueQO") ClueQO clueQO);

    /**
     * 线索--删除
     * @param clueQO     ---线索
     * @return
     */
    int updateDeleteStatusById(@Param("clueQO") ClueQO clueQO);

    /**
     * 管理系统--批量删除线索(将delete_status置为1)
     * @param clueIds
     * @param clueQO
     * @return
     */
    int batchDeleteClueByClueIds(@Param("clueIds")List clueIds,@Param("clueQO") ClueQO clueQO);

    /**
     * 根据线索池ID查询公司
     * @param cluePollId  ---线索池ID
     * @return
     */
    List<UserCompanyVO> selectDistributeCompany(@Param("cluePollId") String cluePollId,@Param("deleteStatus") Short deleteStatus);

    /**
     * 根据用户名查询用户信息及所在公司信息(全国公有池、分公司公有池-分配-按人员姓名模糊查找)
     * @param userName ---用户名
     * @return
     */
    List<UserCompanyVO> selectUserAndCompany(@Param("userName") String userName);

    /**
     * 查询分公司公有池的用户
     * @param companyIds ---公司ID集合
     * @return
     */
    List<UserCompanyVO> selectUserByPoolPermission(@Param("companyIds") List<String> companyIds,@Param("userName") String userName);

    long selectDistributedOrReceiveCount(@Param("cluePoolPublicId") String cluePoolPublicId);
    /**
     * @author wll
     * info-线索池公海-线索清单
     */
    List<ClueVO> selectClueInfo(@Param("clueQO")ClueQO clueQO, @Param("orderStr")String orderStr, @Param("source")String source);

    /**
     *info 用户模块-我的线索池-线索清单
     * @return
     */
    List<ClueVO> getMyClueList(@Param("clueQO")ClueQO clueQO, @Param("clueExtentQO") ClueExtentQO clueExtentQO, @Param("orderStr")String orderStr, @Param("dictionaryEnum")String dictionaryEnum);

    /**
     *info 用户模块-我的线索池-线索清单-释放线索
     */
    int modifyClueData(Map map);


    /**
     * @author wll
     * info 领取线索到个人默认池里
     */
    int modifyClueDataToPersonalDefaultPool(Map map);

    /**
     * 线索0次领取数量
     * @return
     */
    long clueZeroTimeReceiveCount(@Param("cluePoolPublicId") String cluePoolPublicId);


    /**
     * 获取一个线索
     * @return
     */
    Clue selectOneClue();


    long selectCluePoolConversionStatisticsForOneMonth(@Param("cluePoolId") String cluePoolId,@Param("yearMonth") String yearMonth);

    int batchInsertClue(@Param("clueList")List<Clue> clueList);

    /**
     * @description 根据线索ID修改线索标签
     * @param tag 标签
     * @param clueId 线索ID
     * @author ChengYun
     * @date 2021年12月14日 下午 14:34:59
     */
    int updateUserClueTag(@Param("tag") String tag, @Param("clueId") String clueId);
}
